home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 51 / Amiga Format CD51 (2000-03-10)(Future Publishing)(GB)[!][issue 2000-04].iso / -in_the_mag- / pdselect / blizkick / modules / rebootfix.asm < prev    next >
Assembly Source File  |  2000-02-16  |  2KB  |  115 lines

  1. ; FILE: Source:modules/RebootFix.ASM          REV: 7 --- Fix problem with multisync reboot
  2.  
  3. ;
  4. ; RebootFix module for BlizKick
  5. ; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  6. ; Written by Harry Sintonen.
  7. ; This source code is Public Domain.
  8. ;
  9. ;
  10.  
  11.     incdir    "include:"
  12.     include    "blizkickmodule.i"
  13.  
  14.  
  15.     SECTION    PATCH,CODE
  16. _DUMMY_LABEL
  17.     BK_PTC
  18.  
  19. ; Code is run with following incoming parameters:
  20. ;
  21. ; a0=ptr to ROM start (buffer)    eg. $1DE087B8
  22. ; a1=ptr to ROM start (ROM)    eg. $00F80000 (do *not* access!)
  23. ; d0=ROM lenght in bytes    eg. $00080000
  24. ; a2=ptr to _FindResident routine (will search ROM buffer for resident tag):
  25. ;    CALL: jsr (a2)
  26. ;      IN: a0=ptr to ROM, d0=rom len, a1=ptr to resident name
  27. ;     OUT: d0=ptr to resident (buf) or NULL
  28. ; a3=ptr to _InstallModule routine (can be used to plant a "module"):
  29. ;    CALL: jsr (a3)
  30. ;      IN: a0=ptr to ROM, d0=rom len, a1=ptr to module, d6=dosbase
  31. ;     OUT: d0=success
  32. ; a4=ptr to _Printf routine (will dump some silly things (errormsg?) to stdout ;-)
  33. ;    CALL: jsr (a4)
  34. ;      IN: a0=FmtString, a1=Array (may be 0), d6=dosbase
  35. ;     OUT: -
  36. ; d6=dosbase, a6=execbase
  37. ;
  38. ; Code should return:
  39. ;
  40. ; d0=true if succeeded, false if failed.
  41. ; d1-d7/a0-a6 can be trashed. a7 *must* be preserved! ;-)
  42.  
  43.     cmp.w    #37,($C,a0)        ;requires V37+ rom image
  44.     bhs.b    .cont
  45.     moveq    #0,d0
  46.     rts
  47.  
  48. .cont    moveq    #0,d7
  49.  
  50.     move.l    a0,a1
  51.     move.l    #$397C0200,d1
  52.     move.w    #512-1,d2
  53. .findl    subq.w    #1,d2
  54.     beq.b    .badrom
  55.     addq.l    #2,a1
  56.     cmp.l    (a1),d1
  57.     bne.b    .findl
  58.     cmp.w    #$0100,(4,a1)
  59.     bne.b    .findl
  60.  
  61.     move.w    #$4EB9,(a1)+        ;create jsr
  62.     move.l    a1,a5
  63.     move.l    #_earlycode_RT,(a5)    ;add RT!!
  64.  
  65.     move.l    d0,d5
  66.     lea    (_rebootfix_module,pc),a1
  67.     jsr    (a3)            ;call _InstallModule
  68.     move.l    d0,d1
  69.     move.l    d5,d0
  70.     tst.l    d1
  71.     beq.b    .nomod
  72.  
  73.     lea    (_name,pc),a1
  74.     jsr    (a2)            ;call _FindResident
  75.     tst.l    d0
  76.     beq.b    .nomod
  77.     add.l    d0,(a5)            ;add RT!
  78.  
  79.     moveq    #1,d7
  80. .nomod
  81. .badrom
  82.     move.l    d7,d0
  83.     rts
  84.  
  85.     CNOP    0,4
  86. _rebootfix_module
  87.  BK_MOD BKMF_SingleMode,_end,(0)<<24+37<<16+NT_UNKNOWN<<8+(256-128),_name,_idstr,_init
  88.  
  89. ; Singlemode on,
  90. ; NEVER INIT module, requires KS V37.x or better, module type NT_UNKNOWN, priority -128.
  91.  
  92. _init    rts
  93.  
  94. _earlycode_RT    EQU    *-_rebootfix_module-bkm_ResTag
  95.     move.w    #$0200,($100,a4)    ; Colour burst on!
  96.  
  97.     move.l    d0,-(sp)
  98.     moveq    #3,d0
  99.     swap    d0            ; some delay
  100. .loop    move.w    #$0020,($1DC,a4)    ; set PAL
  101.     subq.l    #1,d0
  102.     bne.b    .loop
  103.     move.l    (sp)+,d0
  104.     rts
  105.  
  106. _name
  107. _idstr    dc.b    'RebootFix patch',0
  108.     CNOP    0,2
  109. _end
  110.  
  111.     SECTION    VERSION,DATA
  112.  
  113.     dc.b    '$VER: RebootFix_PATCH 1.2 (5.12.97)',0
  114.  
  115.